第一個範例,就拿官網的來做吧,比較簡單明瞭,又有品質保障XD
現在我們要製作一個簡易的計算機,所以我們有個簡單的Interface,裡面包含Add
功能,可以「A+B」:
public interface ICalculator
{
int Add(int a, int b);
string Mode { get; set; }
event EventHandler PoweringUp;
}
然後我們在Test Function內建置一個substitute
,這是可以建置一個替代的物件,可以製作成stub, mock, fake, spy...這邊大幅的減少,實作出stub、mock的步驟。
calculator = Substitute.For<ICalculator>();
接著我們製作做出一個返回的值,當這個substitute被呼叫的時候,會返回一個值。然後加上收到和沒有收到值的調用。所以就是下面兩段程式碼的功能:
calculator.Add(1, 2).Returns(3);
Assert.That(calculator.Add(1, 2), Is.EqualTo(3));
calculator.Add(1, 2);
calculator.Received().Add(1, 2);
calculator.DidNotReceive().Add(5, 7);
所以當程式碼出問題的時候,就會顯示錯誤訊息(因為不是重點,這邊就沒有列出來,如果想要看可以去官網看)。
接著再加上「Mode」的虛擬對象,並且對其進行斷言(Assert):
calculator.Mode.Returns("DEC");
Assert.That(calculator.Mode, Is.EqualTo("DEC"));
calculator.Mode = "HEX";
Assert.That(calculator.Mode, Is.EqualTo("HEX"));
現在追加一個範例「多個參數」的設定方法,直接在Returns
裡面用「,」做區隔。
calculator.Mode.Returns("HEX", "DEC", "BIN");
Assert.That(calculator.Mode, Is.EqualTo("HEX"));
Assert.That(calculator.Mode, Is.EqualTo("DEC"));
Assert.That(calculator.Mode, Is.EqualTo("BIN"));
我們在於一開始的interface有event EventHandler PoweringUp
,(此處使用argument matching),我們在下面這段程式碼進行觸發此事件。
bool eventWasRaised = false;
calculator.PoweringUp += (sender, args) => eventWasRaised = true;
calculator.PoweringUp += Raise.Event();
Assert.That(eventWasRaised);
這樣就大致完成官方的基礎使用囉!